﻿//以字符串的形式读入两个数字，编写一个函数计算它们的乘积，以字符串形式返回。

//示例1
//输入："11", "99"
//返回值："1089"
//说明：11 * 99 = 1089
//
//示例2
//输入："1", "0"
//返回值："0"

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param s string字符串 第一个整数
     * @param t string字符串 第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        // write code here
        reverse(s.begin(), s.end());
        reverse(t.begin(), t.end());
        int m = s.size(), n = t.size();
        vector<int> tmp(m + n);
        // 1. ⽆进位相乘相加
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                tmp[i + j] += (s[i] - '0') * (t[j] - '0');
            }
        }
        // 2. 处理进位
        int c = 0;
        string ret;
        for (auto x : tmp) {
            c += x;
            ret += c % 10 + '0';
            c /= 10;
        }
        while (c) {
            ret += c % 10 + '0';
            c /= 10;
        }
        // 3. 处理前导零
        while (ret.size() > 1 && ret.back() == '0') ret.pop_back();

        reverse(ret.begin(), ret.end());
        return ret;
    }
};